//
//  ModuleViewController.h
//  CocoaSynth
//
//  Created by Thomas Dupont on 19/02/10.
//  Copyright 2010 Apple Inc. All rights reserved.
//

#import <Cocoa/Cocoa.h>

@protocol ParametersModule;

@class Module;
@class MixingViewController;
@class PortInViewController;
@class PortOutViewController;
@class PortViewController;

/*!
 @class			ModuleViewController
 @abstract		Le controleur dont h&eacute;rite tous les controleurs de modules.
 @discussion	Impl&eacute;mente la plupart des m&eacute;thodes communes aux controleurs de modules.
 */
@interface ModuleViewController : NSViewController {
	Module* model;
	MixingViewController* mixingController;
	NSString* name;
	NSMutableSet* portsIn;
	NSMutableSet* portsOut;
}

@property (retain) Module* model;
@property (retain) NSString* name;
@property (readonly) NSMutableSet* portsIn;
@property (readonly) NSMutableSet* portsOut;

/*!
 @method setMixingController:
 @abstract Le controleur de la table de mixage.
 @param theController Le controleur de la table de mixage.
 */
- (void)setMixingController:(MixingViewController*)theController;

/*!
 @method		selectPortIn:
 @abstract		S&eacute;lectionne le port in pass&eacute; en param&egrave;tre.
 @param			aPort Le port &agrave; selectionner.
 */
- (void)selectPortIn:(PortInViewController*)aPort;

/*!
 @method		selectPortOut:
 @abstract		S&eacute;lectionne le port out pass&eacute; en param&egrave;tre.
 @param			aPort Le port &agrave; selectionner.
 */
- (void)selectPortOut:(PortOutViewController*)aPort;

/*!
 @method		selectPortOut:
 @abstract		S&eacute;lectionne le port out pass&eacute; en param&egrave;tre.
 @param			aPort Le port &agrave; selectionner.
 */
- (void)unselectPorts;

/*!
 @method		disconnectPort:
 @abstract		D&eacute;connecte le port pass&eacute; en param&egrave;tre.
 @param			aPort Le port &agrave; d&eacute;connecter.
 */
- (void)disconnectPort:(PortViewController*)aPort;

/*!
 @method		refresh
 @abstract		Rafraichit la vue des connecteurs.
 @discussion	M&eacute;thode utilis&eacute;e lors du d&eacute;placement d'un module pour faire suivre les connecteurs.
 */
- (void)refresh;

/*!
 @method		displayParameterView
 @abstract		Affiche la vue de param&eacute;trage associ&eacute;e au module.
 */
- (void)displayParameterView;

/*!
 @method		parameters
 @abstract		Le controleur de la vue de param&egrave;tre associ&eacute;e au module.
 @return		Le controleur de la vue de param&egrave;tre associ&eacute;e au module.
 */
- (NSViewController<ParametersModule>*)parameters;

/*!
 @method		bringSubviewToFront:
 @abstract		Remonte la vue associ&eacute;e au module au premier plan de la table de mixage.
 */
- (void)bringModuleToFront;

/*!
 @method		deleteModule
 @abstract		Supprime le module.
 */
- (void)deleteModule;

/*!
 @method		highlight
 @abstract		Met en &eacute;vidence la module.
 */
- (void)highlight;

/*!
 @method		unhighlight
 @abstract		Supprime la mise en &eacute;vidence.
 */
- (void)unhighlight;

@end
